íì ìì ìížíì ìì¹ê³Œ ì€ì 륌 í구íì¬ ê°ë ¥í íìŽíì íµíŽ ìíž ìì€í ì 볎ì, ì ë¢°ì± ë° ìŒë°ì ìž ì·šìœì ì ëí ì íë ¥ì ëì ëë€.
íì ìì ìíží: ê°ë ¥í íì ì ìŽì©í ìíž ìì€í 구í
ìížíì ìžê³ìì 볎ìì ê°ì¥ ì€ìí©ëë€. ê°ë ¥í ìíž ìì€í ì 구ííë €ë©Ž ìžë¶ ì¬íì 죌ì륌 êž°ìžì¬ìŒ í©ëë€. 믞ë¬í ì€ë¥ëŒë ì¹ëª ì ìž ì·šìœì ìŒë¡ ìŽìŽì§ ì ìêž° ë묞ì ëë€. ìíž ë³Žìì ê°ííë í ê°ì§ ë°©ë²ì íì ìì ìížíì ëë€. ìŽë íë¡ê·žëë° ìžìŽì íì ìì€í ì íì©íì¬ ì ìœ ì¡°ê±Žì ì ì©íê³ ìíž ìœëìì íí ë°ìíë ì€ë¥ë¥Œ ë°©ì§í©ëë€.
íì ìì ìížíë 묎ììžê°?
íì ìì ìížíë í¹ì 볎ì ìì±ì 볎ì¥íêž° ìíŽ ê°ë ¥í íìŽíì ì¬ì©íë ìíž êµ¬í ë°©ìì ëë€. 볞ì§ì ìŒë¡ íë¡ê·žëë° ìžìŽì íì ìì€í ì ì¬ì©íì¬ ë€ì곌 ê°ì ìíž ë¶ë³ì±ì ì ì©íë ê²ì ëë€.
- ë°ìŽí° 묎결ì±: ìíží ëë ì ì¡ ì€ì ë°ìŽí°ê° ììëì§ ììëì§ íìží©ëë€.
- êž°ë°ì±: ê¶í ìë ë¹ì¬ìë§ ìížíë ë°ìŽí°ë¥Œ íŽë í ì ìëë¡ ë³Žì¥í©ëë€.
- ì¬ë°ë¥ž í€ ì¬ì©: í€ê° ìëë ì©ëë¡ ì¬ì©ëëì§ íìží©ëë€(ì: ìíží í€ë¥Œ ìížíìë§ ì¬ì©íê³ íŽë ìë ì¬ì©íì§ ìì).
- ì ì í ìŽêž°í: ìíž í늬믞í°ëžê° ì ì í ë§€ê°ë³ìì 묎ììì±ì ì¬ì©íì¬ ì¬ë°ë¥Žê² ìŽêž°íëìëì§ íìží©ëë€.
Ʞ졎ì ìíž êµ¬íì ìŽë¬í ìì±ì ì ì©íêž° ìíŽ ìë ê²ì¬ ë° ë°íì ì íšì± ê²ì¬ì ì졎íë 겜ì°ê° ë§ìµëë€. ê·žë¬ë ìŽ ì ê·Œ ë°©ìì ì€ë¥ê° ë°ìíêž° ìœìµëë€. ë°ë©Žì íì ìì ìížíë ìœëê° ì€íëêž° ì ì 컎íìŒ ìê°ì ìŽë¬í ì€ë¥ë¥Œ í¬ì°©íë ê²ì 목íë¡ í©ëë€. ìŽë 볎ì ì·šìœì ìŽ ë°ìí ìíì í¬ê² ì€ì ëë€.
íì ìì ìížíì ìŽì
íì ìì ìížíë Ʞ졎ì ìíž íë¡ê·žëë°ë³Žë€ ëª ê°ì§ ì€ìí ìŽì ì ì ê³µí©ëë€.
- 볎ìì± í¥ì: 컎íìŒ ìê°ì ì€ë¥ë¥Œ í¬ì°©íšìŒë¡ìš íì ìì ìížíë 공격ìê° ì ì©í ì ìë ë°íì ì·šìœì ì ìíì ì€ì ëë€.
- ì ë¢°ì± í¥ì: íì ìì€í ì ìíž ìœëê° ë ê°ë ¥íê³ ì 뢰í ì ìëë¡ ëì ìêž°ì¹ ìì ëììŽë ì¶©ë ê°ë¥ì±ì ì€ì ëë€.
- ê°ë° ìê° ëšì¶: ìŽêž° ì€ì ì ë ë§ì ìê°ìŽ íìí ì ìì§ë§ íì ìì ìížíë ì€ë¥ë¥Œ ì¡°êž°ì í¬ì°©íê³ ëì€ì ë¹ì©ìŽ ë§ìŽ ëë ëë²ê¹ ë žë ¥ì ë°©ì§íšìŒë¡ìš ê¶ê·¹ì ìŒë¡ ê°ë° ìê°ì ëšì¶í ì ììµëë€.
- ì ì§ êŽëЬ ì©ìŽì± í¥ì: íì ìì ìœëë íì ìì€í ìŽ ìœëì ìëë ëìì ëí ëª íí 묞ì륌 ì ê³µíë¯ë¡ ìŽíŽíê³ ì ì§ êŽëЬíêž°ê° ë ì¬ìŽ ê²œì°ê° ë§ìµëë€.
- ìœë ëª íì± í¥ì: íì 죌ìì 묞ì íí ìí ì íì¬ ìœë륌 ë ìœê² ìŽíŽíê³ ì¶ë¡ í ì ìëë¡ í©ëë€.
íì ìì ìíží ìë ë°©ì
íì ìì ìížíë ëª ê°ì§ 죌ì ìì¹ì ì졎í©ëë€.
1. ê°ë ¥í íìŽí
ê°ë ¥í íìŽíì íë¡ê·žëë° ìžìŽê° ìë¡ ë€ë¥ž ìì ìì ì¬ì©í ì ìë ë°ìŽí° íì ì ëí ì격í ê·ì¹ì ì ì©íë€ë ì믞ì ëë€. ê°ë ¥í íì ìžìŽìì 컎íìŒë¬ë ìŽë¬í ê·ì¹ì ìë°íë ìœë륌 ê±°ë¶íì¬ ë§ì ìŒë°ì ìž ì€ë¥ë¥Œ ë°©ì§í©ëë€.
ì륌 ë€ìŽ, ë¹ë° í€ë¥Œ ì¬ì©íì¬ ë°ìŽí°ë¥Œ ìížííë íšì륌 ìê°íŽ ë³Žê² ìµëë€. íì ìì 구íìì íšìë `EncryptionKey`ì ê°ì í¹ì íì ì í€ë¥Œ ì¬ì©íëë¡ ì ìžë ì ììµëë€. ê·žë¬ë©Ž 컎íìŒë¬ë ìŽ íì ì ê°ë§ íšìì ì ë¬ëëë¡ íì¬ ì못ë í€ íì (ì: íŽë í€)ì ì¬ì©ì ë°©ì§í©ëë€.
2. ëìì ë°ìŽí° íì (ADT)
ëìì ë°ìŽí° íì (ADT)ì ì¬ì©í멎 ë€ìí íìì ì·ší ì ìë ë°ìŽí° íì ì ì ìí ì ììµëë€. ìŽë ìíž í ì€íž, ìŒë° í ì€íž ë° í€ì ê°ìŽ ê³ ì í í¹ì ìì±ì ê°ì§ ìíž í늬믞í°ëžë¥Œ ëíëŽë ë° í¹í ì ì©í©ëë€.
ì륌 ë€ìŽ, ì¬ì©ë ìíží ìê³ ëŠ¬ìŠê³Œ ìŽêž°í 벡í°(IV)ì ëí ì 볎륌 í¬íšíë ìíž í ì€ížì ëí ADT륌 ì ìí ì ììµëë€. ìŽë¥Œ íµíŽ íì ìì€í ì ìŽ ì 볎륌 ì¶ì íê³ íŽë ì€ì ì¬ë°ë¥Žê² ì¬ì©ëëë¡ í ì ììµëë€.
3. í¬í íì
í¬í íì ì íì ì ë°íì ííì ëíëì§ ìë íì ë§€ê°ë³ìì ëë€. 컎íìŒ ìê°ìë§ êŽë šë íì ì ëí ì¶ê° ì 볎륌 ìžìœë©íë ë° ì¬ì©í ì ììµëë€. ìŽë í€ ì¬ì© ëë ë°ìŽí° ì¶ì²ì ê°ì ìì±ì ì¶ì íë ë° ì ì©í©ëë€.
ì륌 ë€ìŽ, í¬í íì ì ì¬ì©íì¬ í€ê° ìíží ëë íŽë ì ìí ê²ìžì§ ì¬ë¶ë¥Œ ëíëŒ ì ììµëë€. ìŽë ê² í멎 컎íìŒë¬ê° ìíží륌 ìíŽ íŽë í€ë¥Œ ì€ìë¡ ì¬ì©íê±°ë ê·ž ë°ëë¡ ì¬ì©íë ê²ì ë°©ì§í ì ììµëë€.
4. ì í íì
ì í íì ì 늬ìì€ê° ì íí í ë² ì¬ì©ëëë¡ í©ëë€. ìŽë ë©ëªšëЬ êŽëЬ ë° ì€ìí ìíží ìì ì ë§€ì° ì ì©í©ëë€. ì륌 ë€ìŽ, í€ë¥Œ ìì±íê³ ëšìŒ ìíží/íŽë ìì ì ì¬ì©í ë€ì ìì íê² íêž°íì¬ í€ ì ì¶ ìíì ìµìíí ì ììµëë€.
5. ì¢ ì íì
ì¢ ì íì ì ì¬ì©í멎 ê°ì íì ìŽ ë€ë¥ž íì ê°ì ë°ëŒ ë¬ëŒì§ ì ììµëë€. ìížíì ê²œì° ìŽë¥Œ íµíŽ í€ í¬êž°, ë©ìì§ êžžìŽ ëë ëì€ì ëí íì© ë²ì륌 *íì ìì€í ì첎*ìì ì§ì í ì ììµëë€. ìŽë¥Œ íµíŽ ìíž ë¶ë³ì±ì ëí ë§€ì° ê°ë ¥í ì ì ê²ìŠìŽ ê°ë¥íë©° ì 첎 공격 íŽëì€ë¥Œ ë°©ì§í ì ììµëë€.
ì€ì íì ìì ìížíì ì
ëªëª íë¡ê·žëë° ìžìŽì ëŒìŽëžë¬ëŠ¬ê° íì ìì ìíží륌 ì§ìí©ëë€. ëª ê°ì§ ìë ë€ì곌 ê°ìµëë€.
1. Haskell
ê°ë ¥í íì ìì€í 곌 ADT ë° í¬í íì ì ëí ì§ìì ê°ì¶ Haskellì íì ìì ìíž ìì€í ì 구ííë ë° ë늬 ì¬ì©ëë ìžìŽì ëë€. ì륌 ë€ìŽ `cryptonite` ëŒìŽëžë¬ëЬë íì ìì ë°©ììŒë¡ ì¬ì©íëë¡ ì€ê³ë êŽë²ìí ìíž í늬믞í°ëžë¥Œ ì ê³µí©ëë€.
ì(ê°ë ì ):
data EncryptionKey
data DecryptionKey
data Ciphertext algorithm iv = Ciphertext ByteString
encrypt :: EncryptionKey -> ByteString -> Ciphertext AES256 GCM
decrypt :: DecryptionKey -> Ciphertext AES256 GCM -> Maybe ByteString
-- The types prevent encrypting with a decryption key,
-- or decrypting with an encryption key.
2. Rust
Rustì ìì ê¶ ë° ì°šì© ìì€í ì ê°ë ¥í íì ìì€í 곌 ê²°í©ëìŽ íì ìì ìížíì ë ë€ë¥ž íë¥í ì íì ëë€. Rustì ì ë¡ ìœì€íž ì¶ìíë ìì íê³ íšìšì ìž ìíž êµ¬íì ê°ë¥íê² í©ëë€.
ì(ê°ë ì ):
struct EncryptionKey;
struct DecryptionKey;
struct Ciphertext { algorithm: String, iv: Vec<u8>, data: Vec<u8> }
fn encrypt(key: &EncryptionKey, plaintext: &[u8]) -> Ciphertext { /* ... */ }
fn decrypt(key: &DecryptionKey, ciphertext: &Ciphertext) -> Option<Vec<u8>> { /* ... */ }
//Rusts's borrow checker helps prevent common vulnerabilities
3. Vale
Valeì ë©ëªšëЬ ìì 곌 ëìì±ì ìŒëì ëê³ ëª ìì ìŒë¡ ì€ê³ë ìì€í ìžìŽì ëë€. ìëª , ìì ë° êž°ë¥ê³Œ ê°ì ê°ë ì ì¬ì©íë©° ìŽë ìíž í€ ë° ë²íŒì ìì í ì¬ì©ì 볎ì¥íê³ ë²íŒ ì€ë²íë¡ ëë ì¬ì© í íŽì ì€ë¥ì ê°ì ë©ëªšëЬ ìì ì·šìœì ì ë°©ì§íë ë° ë§€ì° ì ì©í ì ììµëë€.
4. ì 묞 ìíž ëŒìŽëžë¬ëЬ
ìŒë¶ ìíž ëŒìŽëžë¬ëЬë Ʞ볞 ìžìŽê° ê°ë ¥í íìŽíì ì ê³µíì§ ìëëŒë íì ìì ì ìŒëì ëê³ ì€ê³ëììµëë€. ìŽë¬í ëŒìŽëžë¬ëЬë ì¢ ì¢ ë€ì곌 ê°ì êž°ì ì ì¬ì©í©ëë€.
- íê·žë íì : í€, ìíž í ì€íž ë° ìŒë° í ì€ížì ê°ì ë€ìí ì¢ ë¥ì ìíž ë°ìŽí°ë¥Œ ëíëŽêž° ìíŽ ê³ ì í íì ì ì¬ì©í©ëë€.
- íìžë ìì : ìì ìŽ ì íšíê³ ë°ìŽí°ê° ì¬ë°ë¥Žê² ì¬ì©ëìëì§ íìžíêž° ìíŽ ë°íì ê²ì¬ë¥Œ ìíí©ëë€.
- ì íë ìží°íìŽì€: ìì íê³ ììž¡ ê°ë¥í ë°©ììŒë¡ ì¬ì©íëë¡ ì€ê³ë ì íë íšì ì§í©ì ì ê³µí©ëë€.
곌ì ë° ê³ ë € ì¬í
íì ìì ìížíë ë§ì ìŽì ì ì ê³µíì§ë§ ëª ê°ì§ 곌ì ë ì ìí©ëë€.
- ë³µì¡ì±: íì ìì ìíž ìì€í ì 구ííë ê²ì ìíží ë° íì ìì€í ì ëí ë ê¹ì ìŽíŽê° íìíë¯ë¡ Ʞ졎 ë°©ìë³Žë€ ë ë³µì¡í ì ììµëë€.
- ì±ë¥: íì ê²ì¬ë ìœê°ì ì€ë²í€ë륌 ë°ììí¬ ì ìì§ë§ ì€ì ë¡ë 묎ìí ì ìë 겜ì°ê° ë§ìµëë€. ê·žë¬ë ì ì€íê² ì€ê³ë íì ìì ìœëë Ʞ졎 ìœëë§íŒ ì±ë¥ìŽ ì¢ì ì ììµëë€.
- ìžìŽ ì í: 몚ë íë¡ê·žëë° ìžìŽê° íì ìì ìížíì ì í©í ê²ì ìëëë€. íì ìì€í ìŽ ìœíê±°ë ADT ë° í¬í íì ì ëí ì§ììŽ ì íì ìž ìžìŽë íìí 볎ìŠì ì ê³µíì§ ëª»í ì ììµëë€.
- Ʞ졎 ìì€í 곌ì íµí©: Ʞ졎 ë°©ìì ì¬ì©íë Ʞ졎 ìì€í 곌 íì ìì ìíž ìœë륌 íµí©íë ê²ì ìŽë €ìž ì ììµëë€.
- íìµ ê³¡ì : ê³ êž íì ìì€í ì ìŽíŽíê³ íì©íë €ë©Ž ìë¹í ë žë ¥ìŽ íìí©ëë€. ê·žë¬ë ìŽ íìµì 볎ìë¿ë§ ìëëŒ ìŒë°ì ìž ìœë íì§ì í¥ììí€ë¯ë¡ ì¥êž°ì ìŒë¡ ë§€ì° ê°ì¹ê° ììµëë€.
íì ìì ìíží륌 ìí ëªšë² ì¬ë¡
íì ìì ìíží륌 íšê³Œì ìŒë¡ 구ííë €ë©Ž ë€ì ëªšë² ì¬ë¡ë¥Œ ê³ ë €íììì€.
- ì¬ë°ë¥ž ìžìŽ ì í: ê°ë ¥í íì ìì€í 곌 ADT, í¬í íì ë° êž°í íì ìì êž°ë¥ì ëí ì°ìí ì§ìì ê°ì¶ íë¡ê·žëë° ìžìŽë¥Œ ì ííììì€. Haskell, Rust ë° Valeì íë¥í ì íì ëë€.
- ííìŽ ì¢ì ìíž ëŒìŽëžë¬ëЬ ì¬ì©: íì ìì ë°©ììŒë¡ ì¬ì©íëë¡ ì€ê³ë ì ê²ìŠëê³ ì ì§ êŽëЬëë ìíž ëŒìŽëžë¬ëŠ¬ë¥Œ ì ííììì€.
- ëª íí íì ê²œê³ ì ì: í€, ìíž í ì€íž ë° ìŒë° í ì€ížì ê°ì ìíž ë°ìŽí°ì íì ì ëª ííê² ì ìíê³ ìœë ì 첎ìì ìŽë¬í íì ì ì ì©í©ëë€.
- í¬í íì ì ì¬ì©íì¬ í€ ì¬ì© ì¶ì : í¬í íì ì ì¬ì©íì¬ í€ê° ìíží ëë íŽë ì ìí ê²ìžì§ ì¶ì íê³ í€ë¥Œ ì못ë ì©ëë¡ ì€ìë¡ ì¬ì©íë ê²ì ë°©ì§í©ëë€.
- ì êž°ì ìž ìœë ê²í ìí: ìë šë ìíž ì 묞ê°ì íì ìì€í ì 묞ê°ìê² ìœë륌 ê²í íì¬ ì ì¬ì ìž ì·šìœì ì ìë³íëë¡ í©ëë€.
- ê³µì ê²ìŠ ê³ ë €: ì€ìí ìì€í ì ê²œì° ê³µì ê²ìŠ êž°ì ì ì¬ì©íì¬ ìœëê° í¹ì 볎ì ìì±ì 충족íëì§ ìŠëª íë ê²ì ê³ ë €íììì€. Coq ë° F*ì ê°ì ë구ë ìŽë¬í 목ì ìŒë¡ ì€ê³ëììµëë€.
- ê°ëšíê² ìì: 몚ë ê³ êž íìŽí êž°ì ì í ë²ì ì ì©íë €ê³ íì§ ë§ììì€. í€ ì²ëЬì ê°ìŽ ìì€í ì ê°ì¥ ì€ìí 잡멎ë¶í° ììíì¬ ì ì°šì ìŒë¡ íì ìì ìì¹ì ì ì©í©ëë€.
íì ìì ìížíì ëí êžë¡ë² êŽì
볎ì ìížíì ì€ìì±ì ì ìžê³ì ìŒë¡ ìžì ë°ê³ ììµëë€. ë€ìí ì§ì곌 êµê°ìë ë°ìŽí° 볎ì ë° ìížíì ëí ë€ìí ê·ì 곌 íì€ìŽ ììµëë€. íì ìì ìíží륌 구íí멎 ì¡°ì§ìŽ ìŽë¬í ê·ì ì ì€ìíê³ ê³ ê°ê³Œì ì 뢰륌 구ì¶íë ë° ëììŽ ë ì ììµëë€.
ì륌 ë€ìŽ, ì ëœ ì°í©ì ìŒë° ë°ìŽí° ë³Žíž ê·ì (GDPR)ì ì¡°ì§ìŽ ê°ìž ë°ìŽí°ë¥Œ 볎ížíêž° ìíŽ ì ì í 볎ì ì¡°ì¹ë¥Œ 구ííëë¡ ì구í©ëë€. íì ìì ìížíë ìŽë¬í ì구 ì¬íì 충족íë ë° ì ì©í ëêµ¬ê° ë ì ììµëë€.
ë§ì°¬ê°ì§ë¡, ì격í ë°ìŽí° íì§íë²ìŽ ìë êµê°ìì íì ìì ìížíë ë°ìŽí°ê° ë€ë¥ž ìì¹ì ì ì¥ë 겜ì°ìë êž°ë°ì±ê³Œ 볎ìì ì ì§íë ë° ëììŽ ë ì ììµëë€.
íì ìì ìíží ë°©ìì ì±ííšìŒë¡ìš ì¡°ì§ì 볎ì ë° ê°ìž ì 볎 볎ížì ëí ìœìì ì ìŠí ì ììŒë©° ìŽë ì ìžê³ ê³ ê° ë° íížëìì ì 뢰륌 구ì¶íë ë° íìì ì ëë€.
íì ìì ìížíì 믞ë
íë¡ê·žëë° ìžìŽì íì ìì€í ìŽ ê³ì ë°ì íšì ë°ëŒ íì ìì ìížíê° ëì± ë³Žížíë ê°ë¥ì±ìŽ ëìµëë€. 볎ì ìíž ìì€í ì ë ìœê² 구íí ì ìëë¡ íë ìë¡ìŽ ìžìŽì ëŒìŽëžë¬ëŠ¬ê° ë±ì¥í ê²ì ëë€. ê³µì ê²ìŠì ë°ì ì ëí ìíž ìœëì ì íì±ì ëì± íì ì ê°ì§ê³ ìŠëª í ì ìê² íŽì€ ê²ì ëë€.
ëí 볎ì ì·šìœì ì ëí ìžììŽ ëìì§ê³ ìíž ìì€í ì ë³µì¡ì±ìŽ ìŠê°íšì ë°ëŒ íì ìì ìížíì ì±íìŽ ëì± íëë ê²ì ëë€. ì¡°ì§ì 컎íìŒ ìê°ì ì€ë¥ë¥Œ í¬ì°©íê³ ìíž ìœëê° ê°ë ¥íê³ ì 뢰í ì ìëë¡ ë³Žì¥íë ê²ì ìŽì ì ì ì ë ìžìí ê²ì ëë€.
믞ëìë ê°ë°ìê° ìì íê³ ì 뢰í ì ìë ìì€í ì 구ì¶íë ê°ì¥ íšê³Œì ìž ë°©ë²ìì 깚ë«ê² ë멎ì íì ìì ìížíê° ìíž êµ¬íì ëí Ʞ볞 ì ê·Œ ë°©ììŽ ë ì ììµëë€.
ê²°ë¡
íì ìì ìížíë ìíž ìì€í ì 볎ì곌 ì 뢰ì±ì í¥ììí€ë ê°ë ¥í êž°ì ì ëë€. ê°ë°ìë íì ìì€í ì íì íì©íì¬ ì»ŽíìŒ ìê°ì ì€ë¥ë¥Œ í¬ì°©íê³ ìœëê° ì€ìí 볎ì ìì±ì 충족íëì§ íìží ì ììµëë€. ëª ê°ì§ 곌ì ê° ìì§ë§ íì ìì ìížíì ìŽì ìŽ ë¹ì©ë³Žë€ í¬ë¯ë¡ ìì íê³ ì 뢰í ì ìë ìì€í ì 구ì¶íë ë° íìì ìž ë구ì ëë€.
ìŽ êž°ì¬ì ì€ëª ë ëªšë² ì¬ë¡ë¥Œ ë°ë¥Žê³ íë¡ê·žëë° ìžìŽ ë° íì ìì€í ì ìµì ê°ë° ìí©ì ìµì ìíë¡ ì ì§íšìŒë¡ìš ê°ë°ìë íì ìì ìíží륌 íšê³Œì ìŒë¡ 구ííê³ ì ìžê³ ì²ì€ì ìíŽ ëì± ìì íê³ ìì ì ìž ì í늬ìŒìŽì ì 구ì¶í ì ììµëë€. ìžê³ê° ìížíì ì ì ë ì졎íšì ë°ëŒ íì ìì ìížíì ì€ìì±ì ê³ì ì»€ì§ ê²ì ëë€.